package com.github.common.serializer;


import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.github.common.core.util.PrincipalUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * 自定义序列化器
 */
@Component
@RefreshScope//热更新
public class ImgJsonSerializer extends JsonSerializer<String> {

    //这里是nacos中存的oss的域名（对象存储）
    @Value("${biz.oss.resources-url}")
    private String imgDomain;

    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException {
        //如果将被序列化的(图片)字符串为空，则直接写入“”，如果没有从nacos中拿到oss域名，则直接写入原字符串
        if (StrUtil.isBlank(value)){
            gen.writeString(StrUtil.EMPTY);
            return;
        }else if (StrUtil.isBlank(imgDomain)){
            gen.writeString(value);
            return;
        }
        //否则，将图片地址拼接上oss域名，写入
        String[] imgs = value.split(",");//todo:这里用了魔法值了,留个警示，应该改成变量。如（StrUtil.COMMA）
        StringBuilder sb = new StringBuilder();

        for (String img : imgs){
            //图片为http开头,表示是外链，直接写入
            if (PrincipalUtil.isHttpProtocol(img)){//这里用正则表达式判断，也可以截取前四位判断
                sb.append(img).append(StrUtil.COMMA);
            }
            else {
                sb.append(imgDomain).append(img).append(StrUtil.COMMA);
            }
        }
        //去掉最后一个逗号
        sb.deleteCharAt(sb.length()-1);
        gen.writeString(sb.toString());

    }













}
